#include <QtGui>
#include <QString>
#include <QDateTime>
#include "mainwindow.h"

MainWindow::MainWindow(QWidget* pwgt) : QWidget(pwgt)
{
	printer = new QPrinter;
	numberAxles = 0;
	numberCar = 0;
	//Задаем кодек (мы пишем на UTF-8)
	QTextCodec *codec = QTextCodec::codecForName("UTF-8");
	//Задаем название окна
	setWindowTitle(codec->toUnicode ("Электронные весы"));
	//Добавление меню
	QMenuBar* menubar = new QMenuBar;
	//действие Выход
	QAction* exitAct = new QAction(codec->toUnicode("&Выход"),0);
	QAction* printAct = new QAction(codec->toUnicode("&Печать"),0);
	QAction* cleanAct = new QAction(codec->toUnicode("Очистить таблицы"),0);
	connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));
	connect(printAct, SIGNAL(triggered()), this, SLOT(printSlot()));
	connect(cleanAct, SIGNAL(triggered()), this, SLOT(cleanSlot()));
	//создать меню Файл и добавить действие Выход
	QMenu* mfile = new QMenu(codec->toUnicode("&Файл"));
	QMenu* mEdit = new QMenu(codec->toUnicode("Правка"));
	mfile->addAction(printAct);
	mfile->addAction(exitAct);
	mEdit->addAction(cleanAct);
	menubar->addMenu(mfile);
	menubar->addMenu(mEdit);
	
	QHBoxLayout* labelLayout1 = new QHBoxLayout;
	labelLayout1->addWidget(new QLabel(codec->toUnicode("№ п.п.")),1);
	labelLayout1->addWidget(new QLabel(codec->toUnicode("Дата")),2);
	labelLayout1->addWidget(new QLabel(codec->toUnicode("Время")),2);
	
	//номер ПП дата и время
	QHBoxLayout* ppDateTimeLayout = new QHBoxLayout;
	QLineEdit* ppEdit = new QLineEdit;
	dateTimeEdit = new QLineEdit;
	dateTimeEdit->setReadOnly(true);
	QFont font;
	font.setBold(true);
	dateTimeEdit->setFont(font);
	ppDateTimeLayout->addWidget(ppEdit,1);
	ppDateTimeLayout->addWidget(dateTimeEdit,4);
	
	QTimer* timer = new QTimer(this);
	connect(timer,SIGNAL(timeout()),this,SLOT(showTime()));
	timer->start(1000);
	showTime();
	
	//метка отображающая вес текущей оси
	QHBoxLayout* ves = new QHBoxLayout;
	ves->addWidget(new QLabel(codec->toUnicode("Вес:")));
	vesLabel = new QLabel(QString("100"));
	ves->addWidget(vesLabel);
	ves->addWidget(new QLabel(codec->toUnicode("[Кг]")));
	
	//кнопки "Записать вес оси" и "сосчитать"
	QHBoxLayout* pushLayout = new QHBoxLayout;
	loadData = new QPushButton(codec->toUnicode("Записать вес оси"));
	connect(loadData,SIGNAL(clicked()),this,SLOT(loadDataSlot()));
	summ = new QPushButton(codec->toUnicode("Сосчитать"));
	connect(summ,SIGNAL(clicked()),this,SLOT(summSlot()));
	pushLayout->addWidget(loadData,2);
	pushLayout->addWidget(summ,1);
	
	//Верхняя таблица(данные взвешивания автомобилей)
	QStringList lst1;
	lst1 << codec->toUnicode("№ Машины") << codec->toUnicode("ФИО Водителя")<< codec->toUnicode("№ Накладной")<< codec->toUnicode("Поставщик")<< codec->toUnicode("Получатель")<< codec->toUnicode("Наименование груза")<< codec->toUnicode("Вес автомобиля")<< codec->toUnicode("Кол-во осей");
	topTable = new QTableWidget(20, 8);
	topTable->setHorizontalHeaderLabels(lst1);

	//Нижняя таблица (взвешивание по осям)
	QStringList lst2;
	lst2 << codec->toUnicode("Номер оси") << codec->toUnicode("Вес оси [Кг.]")<< codec->toUnicode("Скорость [Км./ч.]");
	bottomTable = new QTableWidget(6, 3);
	bottomTable->setHorizontalHeaderLabels(lst2);
	for(int i=0;i<6;i++)
	{
		bottomTable->setItem(i,0,new QTableWidgetItem);
		bottomTable->setItem(i,1,new QTableWidgetItem);
		bottomTable->setItem(i,2,new QTableWidgetItem);
	}
	//Создаем радио кнопки

	//Группа радио кнопок "на весах"
	QGroupBox* onScales = new QGroupBox(codec->toUnicode("На весах"));
	QVBoxLayout* onScalesLayout = new QVBoxLayout;
	brutto =  new QRadioButton(codec->toUnicode("Брутто (Гружёный)"));
	tara = new QRadioButton(codec->toUnicode("Тара (Пустой)"));
	tara->setChecked(true);
	onScalesLayout->addWidget(brutto);
	onScalesLayout->addWidget(tara);
	onScales->setLayout(onScalesLayout);
	
	//Группа радио кнопок "Режим работы"
	QGroupBox* regime = new QGroupBox(codec->toUnicode("Режим работы"));
	QVBoxLayout* regimeLayout = new QVBoxLayout;
	avtomat = new QRadioButton(codec->toUnicode("Автоматический"));
	manual = new QRadioButton(codec->toUnicode("Ручной"));
	manual->setChecked(true);
	regimeLayout->addWidget(avtomat);
	regimeLayout->addWidget(manual);
	regime->setLayout(regimeLayout);
	
	QHBoxLayout* hb1 = new QHBoxLayout;
	hb1->addWidget(new QLabel(codec->toUnicode("№ Накладной")),2);
	hb1->addWidget(new QLabel(codec->toUnicode("№ Автомобиля")),4);
	
	//поля ввода: номер водителя и номер накладной	
	QHBoxLayout* hb2 = new QHBoxLayout;
	naklad = new QLineEdit;
	avto = new QComboBox;
	avto->setDuplicatesEnabled(false);
	avto->setEditable(true);
	hb2->addWidget(naklad,2);
	hb2->addWidget(avto,4);
	
	//поле ввода фио водителя
	fio = new QComboBox;
	fio->setDuplicatesEnabled(false);
	fio->setEditable(true);
	//поле ввода отправитель
	otprav = new QComboBox;
	otprav->setDuplicatesEnabled(false);
	otprav->setEditable(true);
	//поле ввода получатель
	poluch = new QLineEdit;
	//поле ввода груз
	gruz = new QLineEdit;
	
	//Задаем расположение компонентов окна
	//Левый лайоут
	QBoxLayout* vLayout1 = new QBoxLayout(QBoxLayout::TopToBottom);
//	vLayout1->addWidget(menubar);
	vLayout1->addLayout(labelLayout1);
	vLayout1->addLayout(ppDateTimeLayout);
	vLayout1->addLayout(ves);
	vLayout1->addLayout(pushLayout);
	//Задаем расположение радио кнопок
	vLayout1->addWidget(onScales);
	vLayout1->addWidget(regime);
	vLayout1->addLayout(hb1);
	vLayout1->addLayout(hb2);
	vLayout1->addWidget(new QLabel(codec->toUnicode("Ф.И.О. Водителя")));
	vLayout1->addWidget(fio);
	vLayout1->addWidget(new QLabel(codec->toUnicode("Отправитель(поставщик)")));
	vLayout1->addWidget(otprav);
	vLayout1->addWidget(new QLabel(codec->toUnicode("Получатель")));
	vLayout1->addWidget(poluch);
	vLayout1->addWidget(new QLabel(codec->toUnicode("Груз")));
	vLayout1->addWidget(gruz);
	
	//Лайоут с таблицами(правый)
	QVBoxLayout* vLayout2 = new QVBoxLayout;
	vLayout2->addWidget(topTable,2);
	vLayout2->addWidget(bottomTable,1);
	
	QHBoxLayout* mainLayout = new QHBoxLayout;
	mainLayout->addLayout(vLayout1,1);
	mainLayout->addLayout(vLayout2,4);
	
	QVBoxLayout* layout = new QVBoxLayout;
	layout->addWidget(menubar);
	layout->addLayout(mainLayout);
	
	setLayout(layout);
}

void MainWindow::showTime()
{
	QDateTime dateTime = QDateTime::currentDateTime();
	dateTimeEdit->setText(dateTime.toString("dd/MM/yyyy hh:mm:ss"));
}
//слот загузки веса оси
void MainWindow::loadDataSlot()
{
	numberAxles++;
	bottomTable->item(numberAxles-1,0)->setText(tr("%1").arg(numberAxles));
	bottomTable->item(numberAxles-1,1)->setText(vesLabel->text());
}
//слот подсчета веса автомобиля
void MainWindow::summSlot()
{
	numberCar++;
	int vesAvto=0;
	for (int i=0;i<numberAxles;i++)
	{
		vesAvto=vesAvto+(bottomTable->item(i,1)->text()).toInt();
	}
	if (topTable->item(numberCar-1,0)==0x00)
	{
		topTable->setItem(numberCar-1,0,new QTableWidgetItem(avto->currentText()));
		topTable->setItem(numberCar-1,1,new QTableWidgetItem(fio->currentText()));
		topTable->setItem(numberCar-1,2,new QTableWidgetItem(naklad->text()));
		topTable->setItem(numberCar-1,3,new QTableWidgetItem(otprav->currentText()));
		topTable->setItem(numberCar-1,4,new QTableWidgetItem(poluch->text()));
		topTable->setItem(numberCar-1,5,new QTableWidgetItem(tr("%1").arg(vesAvto)));
		topTable->setItem(numberCar-1,6,new QTableWidgetItem(tr("%1").arg(numberAxles)));
	}
	else
	{
		bottomTable->item(numberCar-1,1)->setText(avto->currentText());
		bottomTable->item(numberCar-1,1)->setText(fio->currentText());
		bottomTable->item(numberCar-1,1)->setText(naklad->text());
		bottomTable->item(numberCar-1,1)->setText(otprav->currentText());
		bottomTable->item(numberCar-1,1)->setText(poluch->text());
		bottomTable->item(numberCar-1,1)->setText(tr("%1").arg(vesAvto));
		bottomTable->item(numberCar-1,1)->setText(tr("%1").arg(numberAxles));
	}
	for (int i = 0; i<numberAxles; i++)
	{
		bottomTable->item(i,0)->setText("");
		bottomTable->item(i,1)->setText("");
		bottomTable->item(i,2)->setText("");
	}
	numberAxles = 0;
}


void MainWindow::printSlot()
{
	QPrintDialog printDialog(printer,this);
	printDialog.setMinMax(1,1);
	if (printDialog.exec() == QDialog::Accepted)
	{
		//печатаем
		qDebug() << printer;
	}
}
//очистка всей таблицы(в дальнейшем удаление только выделенной стоки)
void MainWindow::cleanSlot()
{
	int i = 0;
	while (topTable->item(i,0)!=0x00)
	{
		for (int j=0; j<8; j++)
		{
			topTable->item(i,j)->setText("");
		}
		i++;
	}
	for (int i = 0; i<6; i++)
	{
		bottomTable->item(i,0)->setText("");
		bottomTable->item(i,1)->setText("");
		bottomTable->item(i,2)->setText("");
	}
}

MainWindow::~MainWindow()
{
	delete printer;
}
